/******************************************************************************* * * Copyright (c) 2012 GigaSpaces Technologies Ltd. All rights reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.openspaces.pu.container.support; import org.jini.rio.boot.ServiceClassLoader; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.core.io.UrlResource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.LinkedHashSet; import java.util.Set; /** * A specific pattern resolver that handles the following: * * 1. Allows to create matching on "file system" resource which actually resides on webster * * Note: This is only applicable when not downloading the processing unit. Or when we are downloading * the processing unit, and shared-lib is used (which is not longer recommended in 7.0). * * @author kimchy */ public class PUPathMatchingResourcePatternResolver extends PathMatchingResourcePatternResolver { protected Resource convertClassLoaderURL(URL url) { if (!(getClassLoader() instanceof ServiceClassLoader)) { return super.convertClassLoaderURL(url); } // add a special case when working with webster, we can list with http if (url.getProtocol().equals("http") && url.toExternalForm().endsWith("/")) { return new WebsterResoruce(url); } return new UrlResource(url); } protected Set doFindMatchingFileSystemResources(File rootDir, String subPattern) throws IOException { Set result = super.doFindMatchingFileSystemResources(rootDir, subPattern); Set actualResult = new LinkedHashSet(); for (Object val : result) { if (!(val instanceof FileSystemResource)) { continue; } FileSystemResource fsResource = (FileSystemResource) val; if (fsResource.getFile() instanceof WebsterFile) { WebsterFile websterFile = (WebsterFile) fsResource.getFile(); actualResult.add(new UrlResource(websterFile.toURL())); } else { actualResult.add(fsResource); } } return actualResult; } protected Set doFindPathMatchingJarResources(Resource rootDirResource, String subPattern) throws IOException { try { return super.doFindPathMatchingJarResources(rootDirResource, subPattern); } catch (IOException e) { // ignore exceptions on shraed-lib, since they come and go when we undeploy and deploy from the FS // but still remain in the CommonClassLoader if (rootDirResource.getURL().toExternalForm().indexOf("shared-lib") != -1) { return new LinkedHashSet(); } throw e; } } }